/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agencia;

import java.io.Serializable;
import javax.persistence.Entity; //Pasa clase a tabla
import javax.persistence.Id;
import javax.persistence.GeneratedValue; //Forma que se generan los ids
import javax.persistence.GenerationType; //Typos de datos

import javax.persistence.Table; //Personalizar nombre de tabla sino idem class
import javax.persistence.Transient; //para atributos que se equiran NO persistir
import javax.persistence.Column; //Personalizar nombre de columna en tabla sino idem class

import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import org.hibernate.*;
/**
 *
 * @author martin
 */
@Entity
public class Boleta implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long idBoleta;

    private Date fechaHora;

    //Uno a muchos unidireccional x default usan tabla intermedia
    //La bidireccional no!
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn()
    private List<Apuesta> apuestas = new ArrayList<Apuesta>();

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn()//nullable=true x defecto, especifica q puede haber objetos sin fk
    private List<Premio> premios = new ArrayList<Premio>();

    @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private Cliente cliente;

    public Boleta() {
    }

    public List<Apuesta> getApuestas() {
        return apuestas;
    }

    public void setApuestas(List<Apuesta> apuestas) {
        this.apuestas = apuestas;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    
    public Date getFechaHora() {
        return fechaHora;
    }

    public void setFechaHora(Date fechaHora) {
        this.fechaHora = fechaHora;
    }

    public long getIdBoleta() {
        return idBoleta;
    }

    public void setIdBoleta(long idBoleta) {
        this.idBoleta = idBoleta;
    }

    public List<Premio> getPremios() {
        return premios;
    }

    public void setPremios(List<Premio> premios) {
        this.premios = premios;
    }


    public float getTotal () {
        float total = 0;
        for (Apuesta a : apuestas) {
            total+=a.getSubtotal();
        }

        return total;
    }
    public void persist () {
        Session session = HibernateUtil.getMySession();
        session.beginTransaction();
        session.persist(this);
        session.getTransaction().commit();
    }



}
